package com.ctshk.rpc.train.service;


import com.ctshk.rpc.train.dto.ReservationTrainPageDTO;

import java.util.List;
import java.util.Map;

/**
 * 城际直通车 火车产品 服务类
 */
public interface CJTrainProductService {

    /**
     * 港铁保存站点信息
     */
    void saveTrainStationCode();

    /**
     * 获取所有车次保存入库
     *
     * @return
     */
    Object getTrainLineList();



    /**
     * 根据出发到达站和时间查询车次列表
     *
     * @param strFmStatCde
     * @param strToStatCde
     * @param dtmDeptDte
     * @return
     */
    List<ReservationTrainPageDTO> getTrainNumberList(String strFmStatCde, String strToStatCde,
                                                     String boardingStationName, String alightingStationName,
                                                     String dtmDeptDte);

    /**
     * 车次列出座位
     *
     * @param strTrnNum
     * @param strFmStatCde
     * @param strToStatCde
     * @param dtmDeptDte
     * @return
     */
    List<Map<String, Object>> getTrainNumberSeatList(String strTrnNum, String strFmStatCde, String strToStatCde,
                                                     String dtmDeptDte);

    /**
     * 列出车次的车厢及车层
     * @return
     */
    List<Map<String, Object>>  listCoachAvalByTrn(String strTrnNum, String strFmStatCde, String strToStatCde,
                       String dtmDeptDte, String seatClsCode);

    /**
     * 座位图资料查询
     * @param strTrnNum
     * @param strFmStatCde
     * @param strToStatCde
     * @param dtmDeptDte
     * @param seatClsCode
     * @param intCoachSeq
     * @return
     */
    List<Map<String, Object>> listSeatPlanByCoach(String strTrnNum, String strFmStatCde, String strToStatCde,
                                                  String dtmDeptDte, String seatClsCode, String intCoachSeq);
    // 开始售票
    String begin();

    // 取消售票
    List<Map<String, Object>> rollBack(String strTxnID);

    /**
     * 自动选座
     *
     * @param strTxnID    CP
     * @param fmStatCde   CP
     * @param toStatCde   HH
     * @param dtmDeptDte  时间
     * @param trainNum    Z820
     * @param SeatClsCode 座位等级    S1("S1", "一等座"),  SP("SP", "特等座"),;
     * @param tickTypeCde ADULT("NA", "成人票"), CHILD("NC", "小孩票"),;
     * @return
     */
    List<Map<String, Object>> selSeatBySystem(String strTxnID, String fmStatCde, String toStatCde, String dtmDeptDte, String trainNum,
                                              String SeatClsCode, String tickTypeCde, Integer adultNum, Integer childNum);

    /**
     * 列出已選座位
     *
     * @return
     */
    public List<Map<String, Object>> listReservedSeat(String strTxnID);

    /**
     * 更改實名資料 UpdateRealNameInfo
     */
    public String updateRealNameInfo(String strTxnID, String strTrnNum,
                                     String intCoachSeq, String intSeatSeq, String dtmTrnDeptDte,
                                     String intDocType, String strDocID, String strDocHolderName,
                                     String intDeckSeq);

    /**
     * 確認付款 mtdPayment
     */
    public String payment(String strTxnID,
                          String amount, String strCustName, String strCustTel);

    /**
     * 完成售票或訂票交易並確認座位及
     * 關連車票票號 mtdCommit
     */
    public String mtdCommit(String strTxnID);
}
